home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d13
/
obronm10.arc
/
TERM.MOD
< prev
next >
Wrap
Text File
|
1991-02-24
|
3KB
|
95 lines
MODULE Term; (* ERV, 1989 *)
IMPORT SYS;
CONST
(* some extended function key values when first RdKey is 00X *)
ardown * = 80; arup * = 72;
arleft * = 75; arrt * = 77;
home * = 71; end * = 79;
pgup * = 73; pgdn * = 81;
ins * = 82; del * = 83;
F1 * = 59; F11 * = 84; (*F11-F20 is F+shift*)
F21 * = 94; (*F21-F30 is F+CTRL*)
F31 * =104; (*F31-F40 is F+ALT*)
Carleft* =115; Carrt * = 116;(*CTRL+arleft/right*)
Chome * =119; Cend * = 117;(*CTRL+home/end*)
Cpgup * =132; Cpgdn * = 118;(*CTRL+pageup/down*)
PROCEDURE RdKey * (VAR ch:CHAR);
BEGIN SYS.CODE(
0B4H, 08H, (* mov ah,08h *)
0CDH, 21H, (* int 21h *)
0C4H, 5EH, 06H, (* les bx,dword ptr [bp+6] *)
26H, 88H, 07H) (* mov es:[bx],al ;return byte *)
END RdKey;
PROCEDURE Put(VAR s:ARRAY OF CHAR);
BEGIN
SYS.CODE(
0B4H, 09H, (*mov ah,09H *)
1EH, (*push ds *)
0C5H, 56H, 04H,(*lds dx,dword ptr [bp+4] ;fetch ptr to buffer *)
0CDH, 21H, (*int 21h *)
1FH (*pop ds *)
)
END Put;
PROCEDURE Wch * (ch:CHAR);
VAR s:ARRAY 3 OF CHAR;
BEGIN s[0] := ch; s[1] := "$"; Put(s)
END Wch;
PROCEDURE WL * ;
CONST lf = 0AX; cr = 0DX;
VAR s1:ARRAY 6 OF CHAR;
BEGIN
s1[0] := cr; s1[1] := lf; s1[2] := "$"; Put(s1)
END WL;
PROCEDURE WSv * (VAR s:ARRAY OF CHAR);
VAR i:INTEGER;
BEGIN
i := ORD(s[0]); i := i * 3 ; i := i ;
i := 0;
WHILE s[i] # 00X DO INC(i) END;
s[i] := "$" ; Put(s); s[i] := 00X
END WSv;
PROCEDURE WS * (s:ARRAY OF CHAR);
BEGIN WSv(s)
END WS;
PROCEDURE RS * (VAR s:ARRAY OF CHAR);
CONST maxbuf = 80;
TYPE ibuf = ARRAY maxbuf OF CHAR;
VAR ib:ibuf; i,j,k:INTEGER;
PROCEDURE RB(VAR s:ibuf);
BEGIN SYS.CODE(
0B4H, 0AH, (*mov ah,0Ah *)
1EH, (*push ds *)
0C5H, 56H, 04H, (*lds dx,dword ptr [bp+4] *)
(* ;fetch ptr to buffer, char[0] is len allowed *)
(* ; and char[1] is len returned to caller *)
0CDH, 21H, (*int 21h *)
1FH) (*pop ds *)
END RB;
BEGIN (*RS*)
ib[0] := CHR(maxbuf - 2); ib[1] := 00X;
RB(ib); WL;
i := ORD(ib[1]); j := 2; k := 0;
WHILE i > 0 DO
s[k] := ib[j]; INC(k); INC(j); DEC(i)
END;
s[k] := 00X
END RS;
PROCEDURE WI * (li:LONGINT);
VAR i:INTEGER; buf:ARRAY 30 OF INTEGER;
BEGIN i := 0; IF li < 0 THEN li := -li; Wch("-") END;
REPEAT buf[i] := SHORT(li MOD 10); li := li DIV 10; INC(i) UNTIL li = 0;
REPEAT DEC(i); Wch(CHR(buf[i] + ORD("0"))) UNTIL i = 0
END WI;
END Term.